/*
 * @Author: 周云芳 164591357@qq.com
 * @Date: 2022-05-23 21:29:09
 * @LastEditors: 周云芳 164591357@qq.com
 * @LastEditTime: 2022-06-02 17:29:03
 * @FilePath: \vue3\vue3-ts\vite.config.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
const fs = require("fs")
// const dotenv = require("dotenv")// Dotenv 是一个零依赖的模块，它能将环境变量中的变量从 .env 文件加载到 process.env 中
export default ({ command, mode }: { command: any, mode: any }) => {
    // 根据当前工作目录中的 `mode` 加载 .env 文件
    // 设置第三个参数为 '' 来加载所有环境变量，而不管是否有 `VITE_` 前缀。
    const envConfig: any = loadEnv(mode, process.cwd(), '')
    let pageEntry = '';
    // let target = envConfig.VITE_TARGET || 'default'
    let NODE_ENV = envConfig.NODE_ENV || 'development';
    if (NODE_ENV == 'production') {
        pageEntry = resolve(__dirname, 'src/packages/mono1/index.html')
    }
    if (NODE_ENV == 'test') {
        pageEntry = resolve(__dirname, 'src/packages/mono2/index.html')
    }
    //views文件夹中添加文件即可，会获取里面的文件夹名在pages中生产模板
    return defineConfig({
        plugins: [vue()],
        base: NODE_ENV === 'development' ? '/' : './',
        // vite config
        // root: "./src/",//设置为src文件夹内(项目入口)
        // 静态资源服务文件夹
        publicDir: 'public',
        // envDir: '../',//(检测环境变量文件所在文件夹)
        // 因为root设为了src所以需要../回到上一层,也可以把.env文件放到src内指定加载环境变量文件的目录,相对于root路径
        server: {
            host: '0.0.0.0',//解决 Network: use `--host` to expose
            port: envConfig.VITE_PORT,//定义端口
            // port: 8080,
            open: true, // 是否自动在浏览器打开
            https: false,  // 是否开启 https
        },
        resolve: {//配置别名,需要配置tsconfig.json文件，compilerOptions中编辑器会自动读取
            alias: [
                {
                    find: '@',
                    replacement: resolve(__dirname, 'src')
                },
            ]
        },
        build: {
            target: 'modules',//浏览器兼容性modules|esnext
            sourcemap: false,//构建后是否生成soutrce map文件

            // outDir: envConfig.VITE_OUTPUT_DIR,  //指定输出文件包名
            outDir: 'dist',
            assetsDir: 'assets', // 指定生成静态资源的存放路径
            chunkSizeWarningLimit: 1500, //警报门槛，限制大文件大小B为单位
            assetsInlineLimit: 4096,//小于此阈值的导入或引用资源将内联为base64编码,以避免额外的http请求,设置为0可以完全禁用此项
            brotliSize: false,//启用|禁用brotli压缩大小报告
            // minify: 'terser', // 混淆器,terser构建后文件体积更小
            // // 清除console和debugger(minify: 'terser',)设置后这个terserOptions才有用
            // terserOptions: {
            //     compress: {
            //         drop_console: true,
            //         drop_debugger: true,
            //     },
            // },
            rollupOptions: {
                input: pageEntry,
                output: {//自动分割包名输出 chunkSizeWarningLimit 配置大小
                    chunkFileNames: 'js/[name]-[hash].js',//入口文件名
                    entryFileNames: 'js/[name]-[hash].js',//出口文件名位置
                    assetFileNames: '[ext]/[name]-[hash].[ext]',//静态文件名位置
                    // assetFileNames: 'assets/static/[name]-[hash].[ext]',//静态文件名位置
                    manualChunks(id: any) {
                        if (id.includes('node_modules')) {
                            return id.toString().split('node_modules/')[1].split('/')[0].toString();
                        }
                    }
                }
            },
        }

    })
}